// 基于 requestAnimationFrame() 实现的定时器
export default class Interval {
  #timerId = null
  #loop = null
  #count = 0
  #timer = Date.now()
  #return = false
  // 构造器
  constructor(cb, time = 0) {
    if(typeof (time * 1) !== 'number') {
      cb(new Error('抱歉! 您的时间参数必须为 数字类型 或者 字符串数字类型'))
      return
    }
    this.#loop = () => {
      if(Date.now() > this.#timer + time * (this.#count + 1)){
        cb(this.#count)
        this.#count++
      }
      if(this.#return) return // 如果标识为true 就是停止定时器
      this.#timerId = requestAnimationFrame(this.#loop)
    }
    this.#timerId = requestAnimationFrame(this.#loop)
  }

  // 清除定时器
  clear() {
    this.#return = true // 改变标识为 true
    cancelAnimationFrame(this.#timerId) // 清除 requestAnimationFrame
  }
}